Lettcode题解

题目描述

删除链表中等于给定值 val 的所有节点。

示例:

1
2
输入: 1->2->6->3->4->5->6, val = 6
输出: 1->2->3->4->5

https://github.com/MisterBooo/LeetCodeAnimation/blob/master/notes/LeetCode第203号问题:移除链表元素.md

不实用虚拟头节点

1
2
3
4
5
6
7
public class ListNode {
int val;//val 是元素E e的意思
ListNode next;
public ListNode(int x) {
val = x;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Solution {
public ListNode removeElementes(ListNode head, int val) {
if (head != null && head.val == val) {
ListNode delNode = head;
head = head.next;
delNode.next = null;
}
if (head == null) {
return null;
}
ListNode prev = head;
while (prev.next != null) {
if (prev.next.val == val) {
ListNode delNode = prev.next;
prev.next = delNode.next;
delNode.next = null;
} else
prev = prev.next;
}
return head;
}

image-20190805170902748

image-20190805171348946

image-20190805171433854


使用虚拟头节点

image-20190805172710694

image-20190806074423980

image-20190806080412491

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Sum {

public static void main(String[] args) {
int[]nums={1,2,3,4,5};
System.out.println(sum(nums));
}
public static int sum(int[] arr) {
return sum(arr, 0);
}
//计算arr[l...n]这个区间所有数字的和
private static int sum(int[] arr, int l) {
if (l == arr.length) {
return 0;
}
return arr[l] + sum(arr, l + 1);
}

image-20190806080638269

image-20190806080929850

image-20190806081020979



链表的天然递归性

image-20190806081513664

递归的微观解读

image-20190806083040771

image-20190806083108990


image-20190806085956929

image-20190806090343552


image-20190806090416191